#include "Boton.h"

#if INSTALANDO
#define PATH_RES PATH_RESOURCES
#else
#define PATH_RES "../Resources/"
#endif

 Boton::Boton( int posx, int posy, int w, int h, string desc, unsigned int p, unsigned int code )
 {
    x = posx;
    y = posy;
    ancho = w;
    alto = h;
    estado = 0;
    texto = desc;
    paso = p;
    id = code;
    string path_res = PATH_RES;
    font14 = TTF_OpenFont((path_res+"fontArial.ttf").c_str(), 14 );
    fontSymbol = TTF_OpenFont((path_res+ "fontSymbol.ttf").c_str(), 14 );
}

int Boton::getX() {
	return x;
}

int Boton::getY() {
	return y;
}

int Boton::getAlto() {
	return alto;
}

int Boton::getAncho() {
	return ancho;
}

string Boton::getTexto() {
	return texto;
}

int Boton::getEstado(){
	return estado;
}

unsigned int Boton::getPaso() {
	return paso;
}

unsigned int Boton::getId() {
	return id;
}

TTF_Font* Boton::getFont14() {
	return font14;
}

TTF_Font* Boton::getFontSymbol() {
	return fontSymbol;
}

void Boton::setEstado(int i){

		estado = i;
}

bool Boton::handleBoton( SDL_Event event, int s_x, int s_y)
{
    bool click = false;
    int x = 0, y = 0;

    if( event.type == SDL_MOUSEBUTTONDOWN )
    {
        if( event.button.button == SDL_BUTTON_LEFT )
        {
            x = event.button.x;
            y = event.button.y;

        	if( ( x > getX() + s_x ) &&
        	    ( x < getX() + s_x + getAncho() ) &&
        		( y > getY() + s_y ) &&
        		( y < getY() + s_y + getAlto() ) ) {

                setEstado(1);

        	}
        }
    }

    if( event.type == SDL_MOUSEBUTTONUP )
    {
        if( event.button.button == SDL_BUTTON_LEFT )
        {
            x = event.button.x;
            y = event.button.y;
            int v_estado = getEstado();
            setEstado(0);
            if (v_estado == 1) {
            	click = true;
            }
        }
    }
    return click;
}

void Boton::handleBoton( SDL_Event event, int s_x, int s_y, SDL_Rect* cam, int cant_elem )
{
    int x = 0, y = 0;

    if ( event.type == SDL_MOUSEBUTTONDOWN )
    {

        if( event.button.button == SDL_BUTTON_LEFT )
        {

            x = event.button.x;
            y = event.button.y;

        	if( ( x > getX() + s_x ) &&
        	    ( x < getX() + s_x + getAncho() ) &&
        		( y > getY() + s_y ) &&
        		( y < getY() + s_y + getAlto() ) ) {

                setEstado(1);


                //OJO! HARDCODE
                if (id == 100 && (((*cam).y) > 0)) {
                	((*cam).y)--;
                } else if (id == 101 && ((*cam).y) < ((cant_elem * 20) - (*cam).h)) {
                	((*cam).y) ++;
                }
        	}

        }
    }

    if( event.type == SDL_MOUSEBUTTONUP )
    {
        if ( event.button.button == SDL_BUTTON_LEFT )
        {
            x = event.button.x;
            y = event.button.y;
            //int v_estado = getEstado(); //Habia un warning de variable no usada
            setEstado(0);

        }
    }
}

void Boton::dibujarBoton(SDL_Surface* surface)
{
	SDL_Color black = { 0, 0, 0 };
	SDL_Surface* symbol = TTF_RenderText_Solid( getFontSymbol(), getTexto().c_str(), black );
	SDL_Surface* mensaje = TTF_RenderText_Solid( getFont14(), getTexto().c_str(), black );
	SDL_Surface* cuadro = SDL_CreateRGBSurface(0, getAncho(), getAlto(), 32, 255, 255, 255, 0 );
	SDL_Surface* borde = SDL_CreateRGBSurface(0, getAncho()+2, getAlto()+2, 32, 255, 255, 255, 0 );
	SDL_FillRect(borde, NULL, SDL_MapRGB(borde->format, 0, 0, 0));

	if ( getEstado() == 0 ) {
		SDL_FillRect(cuadro, NULL, SDL_MapRGB(cuadro->format, 170, 170, 170));
	} else {
		SDL_FillRect(cuadro, NULL, SDL_MapRGB(cuadro->format, 240, 240, 240));
	}
	//OJO!! con eto
    if ( getId() == 100 || getId() == 101) {
    	insertar_imagen( getAncho()/4, getAlto()/4, symbol, cuadro );
    } else {
    	insertar_imagen( getAncho()/8, getAlto()/4, mensaje, cuadro );
    }
	insertar_imagen( getX()-1, getY()-1, borde, surface );
	insertar_imagen( getX(), getY(), cuadro, surface );

	SDL_FreeSurface(mensaje);
	SDL_FreeSurface(cuadro);
	SDL_FreeSurface(borde);
}
